<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  

  
  <title>Hexo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta property="og:type" content="website">
<meta property="og:title" content="Hexo">
<meta property="og:url" content="http://yoursite.com/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:locale" content="en_US">
<meta property="article:author" content="John Doe">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/atom.xml" title="Hexo" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.png">
  
  
    <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  
  
<link rel="stylesheet" href="/css/style.css">

<meta name="generator" content="Hexo 5.1.1"></head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/" id="logo">Hexo</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/">Home</a>
        
          <a class="main-nav-link" href="/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="http://yoursite.com"></form>
      </div>
    </div>
  </div>
</header>
      <div class="outer">
        <section id="main">
  
    <article id="post-Java学习日志" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2020/08/29/Java%E5%AD%A6%E4%B9%A0%E6%97%A5%E5%BF%97/" class="article-date">
  <time datetime="2020-08-28T16:35:45.020Z" itemprop="datePublished">2020-08-29</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
    <div class="article-entry" itemprop="articleBody">
      
        <ul>
<li>static: 可以修饰[成员方法], [成员变量]</li>
</ul>
<ol>
<li>被类的所有对象共享</li>
<li>随着类加载而加载, 优先于对象存在, 对象需要类被加载后才能创建</li>
<li>可以通过类名调用, 也可以通过对象名调用</li>
<li>静态方法只能访问静态成员</li>
<li>非静态方法可以访问静态成员, 也可以访问非静态成员</li>
<li>静态方法中没有this关键字</li>
</ol>
<ul>
<li>继承 extends</li>
</ul>
<ol>
<li>子类可以使用父类的非私有成员</li>
<li>使用继承需要考虑类与类之间是否是is..a的关系, 不能盲目使用</li>
<li>Java中只能单继承, 不能多继承, 但可以多层继承</li>
<li>在子类方法中访问一个变量, 采用”就近原则”:<ol>
<li>子类局部范围查找</li>
<li>子类成员范围查找</li>
<li>父类成员范围查找</li>
<li>都找不到就报错 (不考虑父类的父类)</li>
</ol>
</li>
<li>this和super<ol>
<li>this 代表本类对象的引用</li>
<li>super 代表父类存储空间的标识 (可以理解为父类对象的引用)</li>
<li>成员变量的使用: <ol>
<li>this.成员变量 ====&gt;&gt;&gt; 访问本类成员变量</li>
<li>super.成员变量 ====&gt;&gt;&gt; 访问父类成员变量</li>
</ol>
</li>
<li>成员方法的使用:<ol>
<li>this.成员方法 ===&gt;&gt;&gt; 访问本类成员方法</li>
<li>super.成员方法 ===&gt;&gt;&gt; 访问父类成员方法</li>
</ol>
</li>
<li>构造方法<ol>
<li>this(…) ==&gt;&gt;&gt; 访问本类构造方法</li>
<li>super(…) ===&gt;&gt;&gt;访问父类构造方法</li>
</ol>
</li>
</ol>
</li>
<li>子类中所有的构造方法都默认访问父类中的无参构造方法. 子类初始化之前, 一定要先完成父类数据的初始化, 因为每一个子类构造方法的第一句语句默认是: super()</li>
<li>继承中成员方法的访问特点<ol>
<li>子类成员范围查找</li>
<li>父类成员范围查找</li>
<li>都没有找到就报错 (不考虑父类的父类)</li>
</ol>
</li>
<li>super对象在堆内存中, 单独存在一块super区域, 用来存放父类的数据</li>
<li>方法重写 (发生在继承关系中)<ol>
<li>子类出现了跟父类一模一样的方法声明 (方法名一样, 参数列表一样)</li>
<li>子类需要父类的功能, 而且子类还有自己的特有内容时可以重写方法</li>
<li>Override注解来检测当前方法是否是正确的重写 [校验]的作用</li>
<li>私有方法不能被重写 (因为子类无法继承父类的私有方法)</li>
<li>子类方法的访问权限不能比父类的更低 (public &gt; protected &gt; 默认 &gt; 私有)</li>
<li>静态方法不能被重写, 如果子类也有相同的方法, 并不是重写父类的方法, 而是重定义</li>
</ol>
</li>
</ol>
<ul>
<li>抽象类/抽象方法 abstract</li>
</ul>
<ol>
<li>Java中没有方法体的方法应该定义为抽象方法, 如果类中有抽象方法, 那么该类必须定义为抽象类</li>
<li>public abstract class 类名{}</li>
<li>public abstract void 方法名();</li>
<li>抽象类中不一定有抽象方法, 但是有抽象方法的类一定是抽象类</li>
<li>抽象类不能实例化</li>
<li>抽象类可以有构造方法</li>
<li>抽象类的子类: 要么重写抽象类中的所有抽象方法, 要么是抽象类</li>
</ol>
<ul>
<li>final: 可以修饰 [成员方法] [成员变量] [类]</li>
</ul>
<ol>
<li>修饰类: 该类不能被继承 (即, 不能有子类, 但是可以有父类)</li>
<li>修饰方法: 该方法不能被重写</li>
<li>修饰变量: 该变量是一个常量, 不能再次赋值<ol>
<li>变量是基本数据类型的, 不能改变是变量值</li>
<li>变量是引用数据类型的, 不能改变的是地址值, 但地址值里面的内容是可以改变的</li>
</ol>
</li>
</ol>
<ul>
<li>代码块</li>
</ul>
<ol>
<li>局部代码块: 定义在方法中; 作用: 限定变量的生命周期, 及早释放, 提高内存利用率</li>
<li>构造代码块: 定义在类中方法外; 每次构造方法执行时, 都会执行该代码块中的代码, 并且在构造方法执行前执行; 将多个构造方法中相同的代码抽取到构造代码块中, 提高代码复用性</li>
<li>静态代码块: 定义在类中方法外; 需要通过static关键字修饰, 随着类的加载而加载, 只执行一次; 作用: 在类加载的时候做一些初始化的操作</li>
</ol>
<ul>
<li>接口 interface: 用来定义规范; 用来做功能的扩展</li>
</ul>
<ol>
<li>public interface 接口名{}</li>
<li>实现接口: public class 类名 implements 接口名{}</li>
<li>接口不能被实例化</li>
<li>接口的子类要么重写接口中所有的抽象方法; 要么子类也是抽象类</li>
<li>接口的成员特点:<ol>
<li>成员变量: 只能是常量, 默认修饰符: public static final</li>
<li>构造方法: 没有; 因为接口主要是扩展功能, 没有具体的存在</li>
<li>成员方法: 只能是抽象方法, 默认修饰符:: public abstract</li>
</ol>
</li>
<li>JDK 8中新增了 [默认方法] [静态方法]<ol>
<li>默认方法: <ol>
<li>public default 返回值类型 方法名(参数列表) {} </li>
<li>解决接口升级问题</li>
<li>默认方法不是抽象方法, 所以不强制被重写, 但是可以被重写, 重写的时候去掉default关键字</li>
<li>public可以省略, default不能省略</li>
<li>如果实现了多个接口, 多个接口中存在相同的方法声明, 子类就必须对该方法进行重写</li>
</ol>
</li>
<li>静态方法:<ol>
<li>public static 返回值类型 方法名(参数列表) {}</li>
<li>静态方法只能通过接口名调用, 不能通过实现类名或对象名调用</li>
<li>public可以省略, static不能省略</li>
</ol>
</li>
</ol>
</li>
<li>JDK 9中新增了 [带方法体的私有方法]<ol>
<li>产生原因: JDK 8 允许在接口中定义带方法体的默认方法和静态方法. 这样可能引发一个问题: 当两个默认方法或静态方法包含一段相同的代码实现时, 程序必然考虑将这段实现代码抽取成共性方法, 而这个共性方法时不需要让别人使用的, 因此用私有隐藏起来, 这就是为什么.</li>
<li>private 返回值类型 方法名(参数列表) {}  或者 public static 返回值类型 方法名(参数列表) {}</li>
<li>默认方法可以调用私有的静态方法和非静态方法</li>
<li>静态方法只能调用私有的静态方法</li>
</ol>
</li>
</ol>
<ul>
<li>多态 : 同一个对象在不同时刻表现出来的不同形态</li>
</ul>
<ol>
<li>前提:<ol>
<li>有继承或实现关系</li>
<li>有方法的重写</li>
<li>有父类引用指向子类对象</li>
</ol>
</li>
<li>多态中的成员特点<ol>
<li>成员变量: 编译看父类, 运行看父类</li>
<li>成员方法: 编译看父类, 运行看子类</li>
</ol>
</li>
<li>向上转型 和 向下转型</li>
<li>多态好处和弊端:<ol>
<li>好处: 提供程序扩展性. 定义方法的时候, 使用父类型作为参数, 使用时,使用具体的子类参与操作</li>
<li>弊端: 不能使用子类的特有成员</li>
</ol>
</li>
<li>转型存在的风险和解决方案:<ol>
<li>如果被转的引用类型变量, 对应的实际类型和目标类型不是同一种类型, 那么在转换的时候就会出现 ClassCastException</li>
<li>解决方案: 使用关键字 instanceof ===&gt;&gt;&gt; 变量名 instanceof 类型</li>
</ol>
</li>
</ol>
<ul>
<li>类和接口的关系</li>
</ul>
<ol>
<li>类与类: 继承关系, 只能单继承, 但可以多层继承</li>
<li>接口与接口: 继承关系, 可以单继承, 也可以多继承</li>
<li>类与接口: 实现关系, 可以单实现, 也可以多实现, 还可以在继承一个类的同时实现多个接口</li>
</ol>
<ul>
<li>内部类 : 在一个类中定义另一个类  ===&gt;&gt;&gt; 内部类可以直接访问外部类的成员, 包括私有; 外部类要访问内部类的成员, 必须创建对象</li>
</ul>
<ol>
<li>成员内部类<ol>
<li>定义在类中方法外, 跟成员变量是同一个位置</li>
<li>外界创建成员内部类格式: 外部类名.内部类名 对象名 = 外部类对象.内部类对象</li>
<li>静态成员内部类格式: 外部类名.内部类名 对象名 =  new 外部类名.内部类名()</li>
</ol>
</li>
<li>局部内部类<ol>
<li>定义在方法中</li>
</ol>
</li>
<li>匿名内部类<ol>
<li>前提: 存在一个类或接口, 这里的类可以是具体类也可以是抽象类</li>
<li>格式: new 类名() {重写方法};  new 接口名() {重写方法}</li>
<li>本质: 是一个继承了该类或实现了该接口的子类匿名对象</li>
</ol>
</li>
</ol>
<ul>
<li>数组和集合:</li>
</ul>
<ol>
<li>不同点: <ol>
<li>数组长度不可变; 集合长度可变</li>
<li>数组可以存储基本数据类型和引用数据类型;  集合只能存引用数据类型, 如果要存基本数据类型, 要存对应的包装类</li>
</ol>
</li>
<li>相同点: 都是容器, 可以存储多个数据</li>
<li>集合<ol>
<li>单列 Collection<ol>
<li>List<ol>
<li>ArrayList</li>
<li>LinkedList</li>
</ol>
</li>
<li>Set<ol>
<li>HashSet</li>
<li>TreeSet</li>
</ol>
</li>
</ol>
</li>
<li>双列 Map<ol>
<li>HashMap</li>
<li>Tree Map</li>
</ol>
</li>
</ol>
</li>
<li>遍历: 使用迭代器 iterator</li>
<li>增强for循环<ol>
<li>JDK 5之后出现, 内部原理就是一个迭代器;</li>
<li>实现 Iterable 接口的类才能使用迭代器和增强for</li>
<li>简化数组和Collection集合的遍历</li>
<li>for (集合/数组中元素的数据类型 变量名:集合/数组名) {}</li>
</ol>
</li>
<li>List集合特点:<ol>
<li>存取有序</li>
<li>可以重复</li>
<li>有索引</li>
</ol>
</li>
<li>Set集合特点:<ol>
<li>不可以存储重复元素</li>
<li>没有索引, 不能使用普通for循环遍历</li>
</ol>
</li>
<li>TreeSet集合特点:<ol>
<li>不可以存储重复元素</li>
<li>没有索引</li>
<li>可以将元素按照规则排序: 自然排序或实现Comparable接口,重写compareTo方法; 比较器排序(Comparator comparator), 重写compare方法</li>
<li>排序时返回值是负数, 存左边; 正数存右边; 返回值是0, 表示重复元素, 不存;</li>
</ol>
</li>
<li>HashSet集合特点:<ol>
<li>底层是哈希表</li>
<li>存取无序</li>
<li>不可以存储重复元素</li>
<li>没有索引, 不能使用普通for循环遍历</li>
<li>哈希表的结构<ol>
<li>JDK 1.8之前: 数组+链表</li>
<li>JDK 1.8及之后: 节点个数 &lt;= 8个 (数组+链表);  节点个数 &gt; 8个(数组+红黑树)</li>
</ol>
</li>
</ol>
</li>
</ol>
<ul>
<li>Map集合:</li>
</ul>
<ol>
<li>双列集合, 一个键对应一个值</li>
<li>键不可以重复, 值可以重复</li>
<li>keySet(); entrySet();</li>
<li>Tree Map:<ol>
<li>底层是红黑树结构</li>
<li>依赖自然排序或者比较器排序, 对键进行排序</li>
<li>如果键存储的是自定义对象, 需要实现 Comparable接口或在创建Tree Map对象时给出比较器排序规则</li>
</ol>
</li>
</ol>
<ul>
<li>File类:</li>
</ul>
<ol>
<li>他是文件类和目录路径名的抽象表示</li>
<li>文件和目录是可以通过File封装成对象的</li>
<li>对于File而言, 其封装的并不是一个真正存在的文件, 仅仅是一个路径名, 它可以是存在的, 也可以是不存在的, 将来是要通过具体的操作把这个路径的内容转换为具体存在</li>
<li>createNewFile(); mkdir(); mkdirs(); delete();</li>
<li>isDirectory(); isFile(); exists();</li>
<li>getAbsolutePath(); getPath(); getName(); listFiles()</li>
</ol>
<ul>
<li>IO流: 输入/输出流 (Input / Output)</li>
</ul>
<ol>
<li>字节流<ol>
<li>字节输入流 InputStream<ol>
<li>FileInputStream 读数据: <ol>
<li>创建字节流输入流对象 FileInputStream fis = new FileInpuStream(“myFile\\Hi.txt”);</li>
<li>调用字节流对象的读数据方法 int by; while((ny=fis.read()) !=-1) { … }</li>
<li>释放资源</li>
</ol>
</li>
</ol>
</li>
<li>字节输出流 OutputStream<ol>
<li>FileOutputStream 写数据: write(int b); write(byte[] b); write(byte[] b , int off, int len);</li>
</ol>
</li>
</ol>
</li>
<li>字节缓冲流: BufferedInputStream / BufferedOutputStream</li>
</ol>
<ul>
<li>字符流</li>
</ul>
<ol>
<li>写数据 FileWriter<ol>
<li>write(int c); write(char[] cbuf) 写入一个字符数组; write(char[] cbuf, int len) 写入字符数组的一部分; write(String str)写入一个字符串; write(String str, int off, int len)写入字符串的一部分;</li>
<li>flush(); close()关流时会自动flush</li>
</ol>
</li>
<li>读数据 FileReader<ol>
<li>int read() 一次读一个字符数据; int read(char[] cbuf) 一次读一个字符数组数据;</li>
</ol>
</li>
<li>字符缓冲流<ol>
<li>BufferedWriter(Writer out)<ol>
<li>特有方法: newLine();</li>
</ol>
</li>
<li>BufferedReader(Reader in)<ol>
<li>特有方法: readLine();  &lt;&lt;&lt;=== 读一行文字, 如果到达流的结尾, 则返回null</li>
</ol>
</li>
</ol>
</li>
</ol>
<ul>
<li>转换流</li>
</ul>
<ol>
<li>InputStreamReader  从字节流到字符流的桥梁, 父类是Reader</li>
<li>OutputStreamWriter 从字符流到字节流的桥梁, 父类是Writer</li>
</ol>
<ul>
<li>对象序列化流 (类必须实现Serializable接口, 该接口是个标记接口, 实现该接口, 不用重写任何方法)</li>
</ul>
<ol>
<li>对象序列化: 就是将对象保存到磁盘中, 或在网络中传输对象</li>
<li>这种机制就是使用一个字节序列表示一个对象, 该字节序列包含: 对象的类型, 对象的数据, 对象中存储的属性等信息</li>
<li>字节序列写道文件后, 相当于文件中持久保存了一个对象的信息</li>
<li>反之, 该字节序列还可以从文件中读取回来, 重构(读取)对象, 对他进行反序列化(使用ObjectInputStream);</li>
<li>序列化对象的方法: writeObject(Object obj)  ===&gt;&gt;&gt; 将指定的对象写入ObjectOutputStream</li>
<li>Student s=new Student(“名字”,30);   ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(“myOtherStream\oos.txt”));    oos.writeObject(s);</li>
<li></li>
</ol>
<ul>
<li>对象反序列化流</li>
</ul>
<ol>
<li>构造方法: ObjectInputStream(InputStream in)</li>
<li>方法: Object readObject()  ===&gt;&gt;&gt; 该方法读取到文件的末尾,直接抛出异常, 如果要序列化的对象有多个, 不建议直接将多个对象序列化到文件中, 因为反序列化容易抛出异常;  __建议: 将要序列化的多个对象存储到集合中, 然后集合序列化到文件中 __</li>
<li>ObjectInputStream ois = new ObjectInputStream(new    FileInputStream(“myOtherStream\oos.txt”));   Object obj = ois.readObject(); Student s = (Student) obj;</li>
</ol>
<ul>
<li>serialVersionUID &amp; transient</li>
</ul>
<ol>
<li>用对象序列化流序列化一个对象后, 如果修改了对象所属的类文件, 读取数据会出问题, 抛出 InvalidClassException 异常</li>
<li>解决上面的问题: 重新序列化; 给对象所属的类加一个serialVersionUID: private static final long serialVersionUID =123456789L;</li>
<li>transient: 对象中的某个成员变量的值不想被序列化,使用该关键字, 使之不参与序列化过程</li>
</ol>
<ul>
<li>Properties集合</li>
</ul>
<ol>
<li>是一个Map体系的集合类</li>
<li>Properties可以保存到流中或从流中加载</li>
<li>属性列表中的每个键及其对应的值都是一个字符串</li>
</ol>
<ul>
<li>设计模式:<ul>
<li>模板设计模式 (继承 + final方法 + 抽象类实现)</li>
</ul>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://yoursite.com/2020/08/29/Java%E5%AD%A6%E4%B9%A0%E6%97%A5%E5%BF%97/" data-id="ckeegl9ps0000x0t42jxh402z" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
</article>


  
    <article id="post-hello-world" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2020/08/28/hello-world/" class="article-date">
  <time datetime="2020-08-28T15:48:57.800Z" itemprop="datePublished">2020-08-28</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/2020/08/28/hello-world/">Hello World</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <p>Welcome to <a target="_blank" rel="noopener" href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a target="_blank" rel="noopener" href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a target="_blank" rel="noopener" href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a target="_blank" rel="noopener" href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p>
<h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">&quot;My New Post&quot;</span></span><br></pre></td></tr></table></figure>

<p>More info: <a target="_blank" rel="noopener" href="https://hexo.io/docs/writing.html">Writing</a></p>
<h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure>

<p>More info: <a target="_blank" rel="noopener" href="https://hexo.io/docs/server.html">Server</a></p>
<h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure>

<p>More info: <a target="_blank" rel="noopener" href="https://hexo.io/docs/generating.html">Generating</a></p>
<h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure>

<p>More info: <a target="_blank" rel="noopener" href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://yoursite.com/2020/08/28/hello-world/" data-id="ckeeexvmb0000uct48nvj4l2b" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
</article>


  


</section>
        
          <aside id="sidebar">
  
    

  
    

  
    
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/08/">August 2020</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/2020/08/29/Java%E5%AD%A6%E4%B9%A0%E6%97%A5%E5%BF%97/">(no title)</a>
          </li>
        
          <li>
            <a href="/2020/08/28/hello-world/">Hello World</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      &copy; 2020 John Doe<br>
      Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>
    </div>
    <nav id="mobile-nav">
  
    <a href="/" class="mobile-nav-link">Home</a>
  
    <a href="/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>


  
<link rel="stylesheet" href="/fancybox/jquery.fancybox.css">

  
<script src="/fancybox/jquery.fancybox.pack.js"></script>




<script src="/js/script.js"></script>




  </div>
</body>
</html>